package org.dxy.trigger.http.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dxy.api.dto.request.workshop.CreateWorkshopRequest;
import org.dxy.api.dto.request.workshop.UpdateWorkshopRequest;
import org.dxy.api.dto.response.R;
import org.dxy.infrastructure.persistent.po.query.WorkshopViewPo;

import java.util.List;

/**
 * 车间应用服务接口
 * @author dxy
 * @createTime 2025/8/18
 */
public interface WorkshopApplicationService {
    
    /**
     * 创建车间
     * @param request 创建请求
     * @return 车间ID
     */
    R<Long> create(CreateWorkshopRequest request);
    
    /**
     * 更新车间
     * @param workshopId 车间ID
     * @param request 更新请求
     * @return 操作结果
     */
    R<Void> update(Long workshopId, UpdateWorkshopRequest request);
    
    /**
     * 启用车间
     * @param workshopId 车间ID
     * @return 操作结果
     */
    R<Void> enable(Long workshopId);
    
    /**
     * 禁用车间
     * @param workshopId 车间ID
     * @return 操作结果
     */
    R<Void> disable(Long workshopId);
    
    /**
     * 设置车间为维护状态
     * @param workshopId 车间ID
     * @return 操作结果
     */
    R<Void> setMaintenance(Long workshopId);
    
    /**
     * 删除车间
     * @param workshopId 车间ID
     * @return 操作结果
     */
    R<Void> delete(Long workshopId);
    
    /**
     * 分页查询车间列表
     * @param page 分页参数
     * @param query 查询条件
     * @return 车间列表
     */
    R<Page<WorkshopViewPo>> list(Page<WorkshopViewPo> page, WorkshopViewPo query);
    
    /**
     * 根据ID查询车间详情
     * @param workshopId 车间ID
     * @return 车间详情
     */
    R<WorkshopViewPo> getById(Long workshopId);
    
    /**
     * 根据工厂ID查询车间列表
     * @param factoryId 工厂ID
     * @return 车间列表
     */
    R<List<WorkshopViewPo>> getByFactoryId(Long factoryId);
    
    /**
     * 根据状态查询车间列表
     * @param page 分页参数
     * @param status 状态
     * @return 车间列表
     */
    R<Page<WorkshopViewPo>> getByStatus(Page<WorkshopViewPo> page, String status);
    
    /**
     * @description  
     * @param 	
     * @return 	
     * @date: 2025/9/2 22:01
     * @auther dxy
     */
    R<List<WorkshopViewPo>> getEnabledByFactoryId(Long factoryId);
}